<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    JavaScript对象是键值对的容器，一个个的键值对被称为属性。
    键和值之间使用冒号分隔，两个相邻属性(键值对)用逗号分隔。
    对象的属性和方法，对应特征和行为。
    当一个属性的值是一个函数时，我们通常会特别地称这个属性为方法。
    创建对象：
    字面量方式：let 对象名 = {}
    构造函数方式：let 对象名 = new Object()
    let 对象名 = {
    属性名: 属性值,
    方法名: 函数
    }
    增删改查语法：
    查找属性：对象名.属性名，属性名必须是有效的标识符 或 对象名['属性名']，单引号双引号都可以，这种可以处理更多类型的属性名，如当属性名是包含特殊字符、空格、以数字开头的、是动态的、或者是 Symbol 时
    修改属性：对象名.属性名 = 新值
    增加属性：对象名.新属性名 = 属性值
    删除属性：delete 对象名.属性名
    <script>
        let pink = {
            uname: 'pink老师',
            age: 18,
            gender: '女'
        }
        console.log(pink)
        console.log(typeof pink)
        console.log(pink.age)
        pink.gender = '男'
        console.log(pink.gender)
        pink.hobby = '足球' // 键(属性名)不存在则向对象中添加新属性(如果键存在则会将原有的键对应的值修改)
        console.log(pink.hobby)
        delete pink.age
        console.log(pink)

        let obj = {
            uname: '刘德华',
            song: function (x, y) {
                console.log(x + y)
            }
        }
        obj.song(1, 2)  // 方法调用

        // for/in 循环遍历数组索引（但是索引为字符串类型，不推荐使用）
        let arr = ['pink', 'red', 'blue']
        for (let k in arr) {
            console.log(k)
            console.log(arr[k])  // 字符串索引隐式转换为数字索引
        }

        // for/in 循环遍历对象属性名
        let obj1 = {
            uname: 'pink老师',
            age: 18,
            gender: '男'
        }
        for (let k in obj1) {
            console.log(k)  // 遍历的属性名为字符串类型
            // console.log(obj.'uname') 点符号错误用法
            console.log(obj1[k])  // 打印属性值
        }

        // for 循环遍历数组并访问数组中对象的属性值
        let students = [
            { name: '小明', age: 18, gender: '男', hometown: '河北' },
            { name: '小红', age: 19, gender: '女', hometown: '河南' },
            { name: '小刚', age: 17, gender: '男', hometown: '山西' },
            { name: '小丽', age: 18, gender: '女', hometown: '山东' }
        ]
        for (let i = 0; i < students.length; i++) {
            console.log(students[i].name)
            console.log(students[i].hometown)
        }
    </script>
</body>

</html>